package controller.vinculo;

import java.util.List;

import to.Cliente;
import to.Veiculo;
import to.Vinculo;
import dao.ClienteDAO;
import dao.VeiculoDAO;
import dao.VinculoDAO;

public class ControleVinculo {
	
	private Veiculo v;
	private Cliente c;
	private VinculoDAO vinDao;
	private TipoErroCadastroVinculo resultado;
	
	public TipoErroCadastroVinculo inserir(Cliente cliente, Veiculo veiculo) {
		try{
			VinculoDAO dao = new VinculoDAO();
			
			carregarCliente(cliente);
			carregarVeiculo(veiculo);
			
			if( (c != null && v != null) && 
					(!isVinculoJaCadastrado(c.getId(), v.getId()))
			   ){
				dao.inserir(c.getId(), v.getId());
				resultado = TipoErroCadastroVinculo.SEM_ERRO;
			}
			
		}catch(Exception e){
			resultado = TipoErroCadastroVinculo.ERRO_CRITICO;
		}
		
		return resultado;
	}

	private boolean isVinculoJaCadastrado(int idC, int idV) {
		vinDao = new VinculoDAO();
		List<Vinculo> vin = vinDao.getVinculoPor(idC, idV);
		if(vin.isEmpty()){
			return true;
		}
		return false;
	}

	private void carregarVeiculo(Veiculo veiculo) {
		VeiculoDAO vDao = new VeiculoDAO();
		v = vDao.getVeiculoPor(veiculo.getPlaca());
		if(v == null){
			resultado = TipoErroCadastroVinculo.PLACA_INVALIDA;
		}
	}

	private void carregarCliente(Cliente cliente) {
		ClienteDAO cDao = new ClienteDAO();
		c = cDao.getClientePor(cliente.getCpf());
		if(c == null){
			resultado = TipoErroCadastroVinculo.CPF_INVALIDO;
		}
	}

}
